package cn.itsource.math;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 *	BigInteger: 精度比long高
 *	BigDecimal: 精度比double高，一般在金融产品，银行项目、科研项目、航空航天 等用该类，代替double
 *
 */
public class BigDecimalTest {

	public static void main(String[] args) {
		//BigInteger:构造方法:BigInteger(String val) 
		
		/*
		 * 构造方法：
		 *		BigDecimal(double val)  
		 *		BigDecimal(int val) 
		 *		BigDecimal(String val)  建议使用这种方式创建，因为其他方式有可能会有精度丢失
		 */
		BigDecimal bigDecimal = new BigDecimal("3.0014");
		BigDecimal bigDecimal2 = new BigDecimal("0.000125");
		
		
		//加法：BigDecimal add(BigDecimal augend) 返回 BigDecimal ，其值是 (this + augend)  
		BigDecimal add = bigDecimal.add(bigDecimal2);
		System.out.println(add);
		
		//减法：BigDecimal subtract(BigDecimal subtrahend) 返回 BigDecimal ，其值是 (this - subtrahend) 
		BigDecimal subtract = bigDecimal.subtract(bigDecimal2);
		System.out.println(subtract);
		
		//乘法：BigDecimal multiply(BigDecimal multiplicand) 返回 BigDecimal ，其值是 (this × multiplicand)， 
		BigDecimal multiply = bigDecimal.multiply(bigDecimal2);
		System.out.println(multiply);
		
		//除法：BigDecimal divide(BigDecimal divisor)返回BigDecimal ，其值为(this / divisor 
//		BigDecimal divide = bigDecimal2.divide(bigDecimal);
//		System.out.println(divide);
		
		/*
		 * 当精度超出BigDecimal表示范围的时候，就需要用divide方法重载方法
		 * 
		 * public BigDecimal divide(BigDecimal divisor,RoundingMode roundingMode)
		 * 	RoundingMode：就是一个枚举类，是决定取舍方式的。使用方式：枚举名.字段；
		 */
		BigDecimal divide = bigDecimal2.divide(bigDecimal,RoundingMode.CEILING);
		System.out.println(divide);
		
	}

}
